package utils

import (
	"fmt"
	"os"
	"path"
	"strconv"
	"time"
	"strings"
)

// Str 字符处理类
type urls struct{}

// CurrTime 当前时间处理
func Url() *urls {
	return &urls{}
}
// FileExists查询文件是否存在
func (u *urls) FileExists(filepath string) bool {
	_, err := os.Stat(filepath)
	return err == nil
}
// GetMonthZero 获取当前月份，不是2位的，则添加0
func (u *urls) GetMonthZero() string {
	month := int(time.Now().Month())
	return u.GetPlusZero(month)
}

// 生成随机时间的文件名
func(u *urls) GetTimeStr() string {
	return strconv.FormatInt(time.Now().UnixNano(), 10)
}
// GetPlusZero不是2位的则添加0
func (u *urls) GetPlusZero(sum int) string {
	if sum < 10 && sum > 0 {
		return "0" + strconv.Itoa(sum)
	}
	return strconv.Itoa(sum)
}
// GetFilePath 获取新生成的文件路径
// 目录不存在时创建
func(u *urls) GetFilePath() (string, bool) {
	tm := time.Now()

	filepath := fmt.Sprintf("%s/%d/%s/%s/", "./upload", tm.Year(), u.GetMonthZero(), u.GetPlusZero(tm.Day()))

	if strings.Contains(filepath, ".") {
		// 这步会去掉最后的一个/，所以在返回时加上
		filepath = path.Dir(filepath)
	}

	if _, err := os.Stat(filepath); os.IsNotExist(err) {
		//不存在 创建
		if err := os.MkdirAll(filepath, os.ModePerm); err != nil {
			return "", false
		}
	}

	return filepath + "/", true
}